module Northwind::Database
  # Базовый класс для хранения данных
  abstract class BaseDatabase
    # Создает новую сущность
    abstract def create_entity : DbEntity?

    # Возвращает сущность по идентификатору
    abstract def get_entity(id : Int32) : DbEntity?

    # Удаляет усщность, все её атрибуты и их данные
    abstract def remove_entity(entity : DbEntity)

    # Создаёт атрибут сущности
    abstract def create_entity_attribute(
      entity : DbEntity, type : DbAttributeType, isArray : Bool
    ) : DbAttribute

    # Возвращает все атрибуты сущности
    abstract def get_entity_attributes(entity : DbEntity) : Array(DbAttribute)

    # Возвращает значение атрибута сущности
    abstract def get_entity_attribute_value(attribute : DbAttribute) : Object?

    # Удаляет атрибут сущности
    abstract def remove_entity_attribute(attribute : DbAttribute)

    # Устанавливает значение атрибута
    abstract def set_attribute_value(attribute : DbAttribute, value : Object)
  end
end
